/**
 * date:2020/02/27
 * author:Mr.Chung
 * version:2.0
 * description:layuimini 主体框架扩展
 */
layui.define(["jquery", "miniMenu", "miniTab", "miniTheme"], function(exports) {
	var $ = layui.$,
		layer = layui.layer,
		miniMenu = layui.miniMenu,
		miniTheme = layui.miniTheme,
		miniTab = layui.miniTab;

	if (!/http(s*):\/\//.test(location.href)) {
		var tips = "请先将项目部署至web容器（Apache/Tomcat/Nginx/IIS/等），否则部分数据将无法显示";
		return layer.alert(tips);
	}

	var miniAdmin = {

		/**
		 * 后台框架初始化
		 * @param options.iniUrl   后台初始化接口地址
		 * @param options.clearUrl   后台清理缓存接口
		 * @param options.urlHashLocation URL地址hash定位
		 * @param options.bgColorDefault 默认皮肤
		 * @param options.multiModule 是否开启多模块
		 * @param options.menuChildOpen 是否展开子菜单
		 * @param options.loadingTime 初始化加载时间
		 * @param options.pageAnim iframe窗口动画
		 * @param options.maxTabNum 最大的tab打开数量
		 */
		render: function(options) {
			options.iniUrl = options.iniUrl || null;
			options.clearUrl = options.clearUrl || null;
			options.urlHashLocation = options.urlHashLocation || false;
			options.bgColorDefault = options.bgColorDefault || 0;
			options.multiModule = options.multiModule || false;
			options.menuChildOpen = options.menuChildOpen || false;
			options.loadingTime = options.loadingTime || 1;
			options.pageAnim = options.pageAnim || false;
			options.maxTabNum = options.maxTabNum || 20;
			// $.getJSON(options.iniUrl, function (data) {
			var data = options.menuList;
			console.log(options.menuList)
			if (data == null) {
				miniAdmin.error('暂无菜单信息')
			} else {
				miniAdmin.renderLogo(data.logoInfo);
				miniAdmin.renderClear(options.clearUrl);
				miniAdmin.renderHome(data.homeInfo);
				miniAdmin.renderAnim(options.pageAnim);
				miniAdmin.listen();
				miniMenu.render({
					menuList: data.menuInfo,
					multiModule: options.multiModule,
					menuChildOpen: options.menuChildOpen
				});
				miniTab.render({
					filter: 'layuiminiTab',
					urlHashLocation: options.urlHashLocation,
					multiModule: options.multiModule,
					menuChildOpen: options.menuChildOpen,
					maxTabNum: options.maxTabNum,
					listenSwichCallback: function() {
						miniAdmin.renderDevice();
					}
				});
				miniTheme.render({
					bgColorDefault: options.bgColorDefault,
					listen: true,
				});
				miniAdmin.deleteLoader(options.loadingTime);
			}
			// }).fail(function () {
			//     miniAdmin.error('菜单接口有误');
			// });
		},

		/**
		 * 初始化logo
		 * @param data
		 */
		renderLogo: function(data) {
			var html = '<a href="' + data.href + '"><img src="' + data.image + '" alt="logo"><h1>' + data.title +
				'</h1></a>';
			$('.layuimini-logo').html(html);
		},

		/**
		 * 初始化首页
		 * @param data
		 */
		renderHome: function(data) {
			sessionStorage.setItem('layuiminiHomeHref', data.href);
			$('#layuiminiHomeTabId').html('<span class="layuimini-tab-active"></span><span class="disable-close">' + data.title +
				'</span><i class="layui-icon layui-unselect layui-tab-close">ဆ</i>');
			$('#layuiminiHomeTabId').attr('lay-id', data.href);
			$('#layuiminiHomeTabIframe').html(
				'<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0"  src="' +
				data.href + '"></iframe>');
		},

		/**
		 * 初始化缓存地址
		 * @param clearUrl
		 */
		renderClear: function(clearUrl) {
			$('.layuimini-clear').attr('data-href', clearUrl);
		},

		/**
		 * 初始化iframe窗口动画
		 * @param anim
		 */
		renderAnim: function(anim) {
			if (anim) {
				$('#layuimini-bg-color').after('<style id="layuimini-page-anim">' +
					'.layui-tab-item.layui-show {animation:moveTop 1s;-webkit-animation:moveTop 1s;animation-fill-mode:both;-webkit-animation-fill-mode:both;position:relative;height:100%;-webkit-overflow-scrolling:touch;overflow:auto;}\n' +
					'@keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
					'    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
					'}\n' +
					'@-o-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
					'    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
					'}\n' +
					'@-moz-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
					'    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
					'}\n' +
					'@-webkit-keyframes moveTop {0% {opacity:0;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px);}\n' +
					'    100% {opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);}\n' +
					'}' +
					'</style>');
			}
		},

		/**
		 * 进入全屏
		 */
		fullScreen: function() {
			var el = document.documentElement;
			var rfs = el.requestFullScreen || el.webkitRequestFullScreen;
			if (typeof rfs != "undefined" && rfs) {
				rfs.call(el);
			} else if (typeof window.ActiveXObject != "undefined") {
				var wscript = new ActiveXObject("WScript.Shell");
				if (wscript != null) {
					wscript.SendKeys("{F11}");
				}
			} else if (el.msRequestFullscreen) {
				el.msRequestFullscreen();
			} else if (el.oRequestFullscreen) {
				el.oRequestFullscreen();
			} else {
				miniAdmin.error('浏览器不支持全屏调用！');
			}
		},

		/**
		 * 退出全屏
		 */
		exitFullScreen: function() {
			var el = document;
			var cfs = el.cancelFullScreen || el.webkitCancelFullScreen || el.exitFullScreen;
			if (typeof cfs != "undefined" && cfs) {
				cfs.call(el);
			} else if (typeof window.ActiveXObject != "undefined") {
				var wscript = new ActiveXObject("WScript.Shell");
				if (wscript != null) {
					wscript.SendKeys("{F11}");
				}
			} else if (el.msExitFullscreen) {
				el.msExitFullscreen();
			} else if (el.oRequestFullscreen) {
				el.oCancelFullScreen();
			} else {
				miniAdmin.error('浏览器不支持全屏调用！');
			}
		},

		/**
		 * 初始化设备端
		 */
		renderDevice: function() {
			if (miniAdmin.checkMobile()) {
				$('.layuimini-tool i').attr('data-side-fold', 1);
				$('.layuimini-tool i').attr('class', 'fa fa-outdent');
				$('.layui-layout-body').removeClass('layuimini-mini');
				$('.layui-layout-body').addClass('layuimini-all');
			}
		},


		/**
		 * 初始化加载时间
		 * @param loadingTime
		 */
		deleteLoader: function(loadingTime) {
			setTimeout(function() {
				$('.layuimini-loader').fadeOut();
			}, loadingTime * 1000)
		},

		/**
		 * 成功
		 * @param title
		 * @returns {*}
		 */
		success: function(title) {
			return layer.msg(title, {
				icon: 1,
				shade: this.shade,
				scrollbar: false,
				time: 2000,
				shadeClose: true
			});
		},

		/**
		 * 失败
		 * @param title
		 * @returns {*}
		 */
		error: function(title) {
			return layer.msg(title, {
				icon: 2,
				shade: this.shade,
				scrollbar: false,
				time: 3000,
				shadeClose: true
			});
		},

		/**
		 * 判断是否为手机
		 * @returns {boolean}
		 */
		checkMobile: function() {
			var ua = navigator.userAgent.toLocaleLowerCase();
			var pf = navigator.platform.toLocaleLowerCase();
			var isAndroid = (/android/i).test(ua) || ((/iPhone|iPod|iPad/i).test(ua) && (/linux/i).test(pf)) ||
				(/ucweb.*linux/i.test(ua));
			var isIOS = (/iPhone|iPod|iPad/i).test(ua) && !isAndroid;
			var isWinPhone = (/Windows Phone|ZuneWP7/i).test(ua);
			var clientWidth = document.documentElement.clientWidth;
			if (!isAndroid && !isIOS && !isWinPhone && clientWidth > 768) {
				return false;
			} else {
				return true;
			}
		},

		/**
		 * 监听
		 */
		listen: function() {

			/**
			 * 清理
			 */
			$('body').on('click', '[data-clear]', function() {
				var loading = layer.load(0, {
					shade: false,
					time: 2 * 1000
				});
				sessionStorage.clear();

				// 判断是否清理服务端
				var clearUrl = $(this).attr('data-href');
				if (clearUrl != undefined && clearUrl != '' && clearUrl != null) {
					$.getJSON(clearUrl, function(data, status) {
						layer.close(loading);
						if (data.code != 1) {
							return miniAdmin.error(data.msg);
						} else {
							return miniAdmin.success(data.msg);
						}
					}).fail(function() {
						layer.close(loading);
						return miniAdmin.error('清理缓存接口有误');
					});
				} else {
					layer.close(loading);
					return miniAdmin.success('清除缓存成功');
				}
			});

			/**
			 * 刷新
			 */
			$('body').on('click', '[data-refresh]', function() {
				$(".layui-tab-item.layui-show").find("iframe")[0].contentWindow.location.reload();
				miniAdmin.success('刷新成功');
			});

			/**
			 * 监听提示信息
			 */
			$("body").on("mouseenter", ".layui-menu-tips", function() {
				if (miniAdmin.checkMobile()) {
					return false;
				}
				var classInfo = $(this).attr('class'),
					tips = $(this).children('span').text(),
					isShow = $('.layuimini-tool i').attr('data-side-fold');
				if (isShow == 0) {
					openTips = layer.tips(tips, $(this), {
						tips: [2, '#2f4056'],
						time: 30000
					});
				}
			});
			$("body").on("mouseleave", ".layui-menu-tips", function() {
				if (miniAdmin.checkMobile()) {
					return false;
				}
				var isShow = $('.layuimini-tool i').attr('data-side-fold');
				if (isShow == 0) {
					try {
						layer.close(openTips);
					} catch (e) {
						console.log(e.message);
					}
				}
			});


			/**
			 * 全屏
			 */
			$('body').on('click', '[data-check-screen]', function() {
				var check = $(this).attr('data-check-screen');
				if (check == 'full') {
					miniAdmin.fullScreen();
					$(this).attr('data-check-screen', 'exit');
					$(this).html('<i class="fa fa-compress"></i>');
				} else {
					miniAdmin.exitFullScreen();
					$(this).attr('data-check-screen', 'full');
					$(this).html('<i class="fa fa-arrows-alt"></i>');
				}
			});

			/**
			 * 点击遮罩层
			 */
			$('body').on('click', '.layuimini-make', function() {
				miniAdmin.renderDevice();
			});

		}
	};


	exports("miniAdmin", miniAdmin);
});
